 // 动态内存分配
 // 指针
 // 结构体
 // 上三个是学习用C语言实现数据结构的基础
#include<stdlib.h>
int qarr[10];
int main()
{
	
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int n = 0;
	scanf("%d", &n);
	int* parr = (int*)malloc(sizeof(int ) * n);     // 返回size个字节的内存块的首地址
	if (parr == NULL)      //  开辟失败
	{
		printf("申请失败\n");
		return 1;
	}
	for (int i = 0; i < n; i++)
	{
		*(parr + i) = i + 1;
	}
	for (int i = 0; i < n; i++)
	{
		printf("%d\n", parr[i]);
	}
	printf("-----------------------------------------\n");
	//parr[0] = 10;
	//printf("%d\n", parr[0]);
	// printf("%d\n", sizeof(parr));
	// printf("arr = %p , parr = %p , qarr = %p\n", arr, parr,qarr);
	free(parr);
	parr = NULL;       // parr 野指针
	// *(parr) = 10;
	// printf("%d\n", *(parr));
	return 0;
}

#include<stdlib.h>
int main()
{
	int * i = (int *)malloc(0);     // malloc 0个字节的空间，不会报错，但是要这样写，无意义
	printf("%p\n", i);
	*i = 10;
}